// #ifdef APP-NVUE
const dom = weex.requireModule('dom');
// #endif
export default {
    data() {
        return {
            uniShow: false,
            left: 0
        }
    },
    computed: {
        moveLeft() {
            return `translateX(${this.left}px)`
        }
    },
    watch: {
        show(newVal) {
            if (!this.position || JSON.stringify(this.position) === '{}') return;
            if (this.autoClose) return
            if (newVal) {
                this.$emit('change', true)
                this.open()
            } else {
                this.$emit('change', false)
                this.close()
            }
        }
    },
    mounted() {
        this.position = {}
        if (this.swipeaction.children !== undefined) {
            this.swipeaction.children.push(this)
        }
        setTimeout(() => {
            this.getSelectorQuery()
        }, 100)
    },
    beforeDestoy() {
        this.swipeaction.children.forEach((item, index) => {
            if (item === this) {
                this.swipeaction.children.splice(index, 1)
            }
        })
    },
    methods: {
        onClick(index, item) {
            this.$emit('click', {
                content: item,
                index
            })
            this.close()
        },
        touchstart(e) {
            const {
                pageX
            } = e.touches[0]
            if (this.disabled) return
            const left = this.position.content.left
            if (this.autoClose) {
                this.swipeaction.closeOther(this)
            }
            this.width = pageX - left
            if (this.isopen) return
            if (this.uniShow) {
                this.uniShow = false
                this.isopen = true
                this.openleft = this.left + this.position.button.width
            }
        },
        touchmove(e, index) {
            if (this.disabled) return
            const {
                pageX
            } = e.touches[0]
            this.setPosition(pageX)
        },
        touchend() {
            if (this.disabled) return
            if (this.isopen) {
                this.move(this.openleft, 0)
                return
            }
            this.move(this.left, -40)
        },
        setPosition(x, y) {
            if (!this.position.button.width) {
                return
            }
            // this.left = x - this.width
            this.setValue(x - this.width)
        },
        setValue(value) {
            // 设置最大最小值
            this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0))
            this.position.content.left = this.left
            if (this.isopen) {
                this.openleft = this.left + this.position.button.width
            }
        },
        move(left, value) {
            if (left >= value) {
                this.$emit('change', false)
                this.close()
            } else {
                this.$emit('change', true)
                this.open()
            }
        },
        open() {
            this.uniShow = true
            this.left = -this.position.button.width
            this.setValue(-this.position.button.width)
        },
        close() {
            this.uniShow = true
            this.setValue(0)
            setTimeout(() => {
                this.uniShow = false
                this.isopen = false
            }, 300)
        },
        getSelectorQuery() {
            // #ifndef APP-NVUE
            const views = uni.createSelectorQuery()
                .in(this)
            views
                .selectAll('.selector-query-hock')
                .boundingClientRect(data => {
                    this.position.content = data[1]
                    this.position.button = data[0]
                    if (this.autoClose) return
                    if (this.show) {
                        this.open()
                    } else {
                        this.close()
                    }
                })
                .exec()
            // #endif
            // #ifdef APP-NVUE
            dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {
                if (this.position.content) return
                this.position.content = data.size
            })
            dom.getComponentRect(this.$refs['selector-button-hock'], (data) => {
                if (this.position.button) return
                this.position.button = data.size
                if (this.autoClose) return
                if (this.show) {
                    this.open()
                } else {
                    this.close()
                }
            })
            // #endif
        }
    }
}
